{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b79f4fbe",
   "metadata": {},
   "source": [
    "# eigan value\n",
    "$$\n",
    "    \\mathbf{A}\\mathbf{x} = \\lambda\\mathbf{x}\n",
    "$$\n",
    "1. numpy solution\n",
    "> numpy.linalg.eig <br>\n",
    "> numpy.linalg.inv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "900cabaf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 1.98005050e+00, -5.05037623e-05]),\n",
       " array([[ 0.71066887, -0.70352665],\n",
       "        [ 0.70352665,  0.71066887]]))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from numpy.linalg import eig,inv\n",
    "\n",
    "a = np.array([[1,0.99],[0.99,0.98]])\n",
    "eig(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2e75261b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 5.05037623e-01, -1.98005050e+04]),\n",
       " array([[ 0.71066887, -0.70352665],\n",
       "        [ 0.70352665,  0.71066887]]))"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eig(inv(a))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a6ac5a9",
   "metadata": {},
   "source": [
    "# linear euquqtion set\n",
    "$$\n",
    "    \\mathbf{A}\\mathbf{x} = \\mathbf{b}\n",
    "$$\n",
    "\n",
    "<font color=maroon size=5.5><b>numpy.linalg.solve</b></font> <br>\n",
    "\n",
    "    solve(A,b) \n",
    "    > A is the paramtric matrix \n",
    "    > b is the value vector "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "781cc33a",
   "metadata": {},
   "source": [
    "## real number domain\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "x_1 + 2x_2 + 3x_3 = 1\\\\\n",
    "2x_1 + 4x_2 + 8x_3 = 1\\\\\n",
    "9x_1 + 6x_2 + 3x_3 = 3\\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "371a65e0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.5,  1.5, -0.5])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from numpy.linalg import solve\n",
    "\n",
    "A = np.mat(\"1,2,3;2,4,8;9,6,3\")\n",
    "b = np.array([1,1,3])\n",
    "c = solve(A,b)\n",
    "c"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "680fae9a",
   "metadata": {},
   "source": [
    "## complex number domain \n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "(2+3j)x_1 + 2x_2 + 3x_3 = 1\\\\\n",
    "2x_1 + 4x_2 + (8-2j)x_3 = 1\\\\\n",
    "9x_1 + (6+j)x_2 + 3x_3 = 3\\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "281a0f9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.05560166-0.09149378j,  0.49107884+0.07904564j,\n",
       "       -0.12261411-0.0473029j ])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from numpy import linalg\n",
    "\n",
    "A = np.mat(\"2+3j,2,3;2,4,8-2j;9,6+1j,3\")\n",
    "b = np.array([1,1,3])\n",
    "d = solve(A,b)\n",
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea54c730",
   "metadata": {},
   "source": [
    "# non-linear equation set\n",
    "## Newton's recurssion \n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "f_1(x_1, x_2, \\cdots, x_n) = 0\\\\\n",
    "f_2(x_1, x_2, \\cdots, x_n) = 0\\\\\n",
    "\\vdots\\\\\n",
    "f_n(x_1, x_2, \\cdots, x_n) = 0\\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$\n",
    "\n",
    "recursion formula looks like:\n",
    "$$\n",
    "    \\mathbf{x}^{(k+1)} = \\mathbf{x}^{(k)} - \\mathbf{F}^\\prime(\\mathbf{x}^{(k)})\\cdot\\mathbf{F}(\\mathbf{x}^{(k)}) \\space , \\space k=0,1,\\cdots,n\n",
    "$$\n",
    "\n",
    "in recurssion formula above, $\\mathbf{F}^\\prime(\\mathbf{x}^{(k)})$ is the jacobian matrix, which is $fjca$ in solution summary"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1695ffb5",
   "metadata": {},
   "source": [
    "## scipy packages"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f5ce43f",
   "metadata": {},
   "source": [
    "### scipy root\n",
    "<font color=maroon size=5.5><b>scipy.optimize.root</b></font> <br>\n",
    "```\n",
    "scipy.optimize.root(fun, \n",
    "                    x0, \n",
    "                    args=(), \n",
    "                    method=‘hybr’, \n",
    "                    jac=None, \n",
    "                    tol=None, \n",
    "                    callback=None, \n",
    "                    options=None)\n",
    "----------------\n",
    "parameter fun: a user defined function, should define its return equation set. \n",
    "parameter x0: initial presumption of solution of equation, conpulsory param, root function will start recurssion process around this initial value\n",
    "parameter args: extra parameters that might be inplanted in fun\n",
    "parameter method: default by ‘hybr’，also could be ‘lm’ ‘broyden1’ ‘broyden2’ ‘anderson’ ‘linearmixing’ ‘diagbroyden’ ‘excitingmixing’ ‘krylov’ ‘df-sane’, names stands for different solution algorithm\n",
    "parameter tol: error precision\n",
    "```      "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb3268d3",
   "metadata": {},
   "source": [
    "$$\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "x_0 + x_0x_1 -2 = 0 \\\\\n",
    "x_0 -x_1 -2 = 0\\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9f8a238e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    fjac: array([[-0.84746133,  0.53085713],\n",
      "       [-0.53085713, -0.84746133]])\n",
      "     fun: array([0., 0.])\n",
      " message: 'The solution converged.'\n",
      "    nfev: 25\n",
      "     qtf: array([2.67625133e-10, 1.67642707e-10])\n",
      "       r: array([1.883746  , 0.65863713, 1.59257086])\n",
      "  status: 1\n",
      " success: True\n",
      "       x: array([-1., -3.])\n"
     ]
    }
   ],
   "source": [
    "from scipy.optimize import root\n",
    "\n",
    "def f1(x):\n",
    "    return [x[0]+x[0]*x[1]-2, x[0]-x[1]-2]\n",
    "\n",
    "print(root(f1,[0,-1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c050fca6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    fjac: array([[-0.70710678, -0.70710678],\n",
      "       [ 0.70710678, -0.70710678]])\n",
      "     fun: array([3.55271368e-15, 0.00000000e+00])\n",
      " message: 'The solution converged.'\n",
      "    nfev: 5\n",
      "     qtf: array([-6.16795121e-12, -1.25607397e-15])\n",
      "       r: array([-1.41421356,  0.70710678,  0.70710678])\n",
      "  status: 1\n",
      " success: True\n",
      "       x: array([2.00000000e+00, 1.14831986e-15])\n"
     ]
    }
   ],
   "source": [
    "print(root(f1,[0,0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "435ea3b8",
   "metadata": {},
   "source": [
    "by setting jcab parameter, we could speed up calculation. <br>\n",
    "original non-linear equation set:\n",
    "\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "x_0x_1 + x_1x_2 + sinx_0e^{x_1} + x_1 = 0 \\\\\n",
    "x_0x_1 -e^{x_0}x_1 + 1 = 0 \\\\\n",
    "x_1x_2 + e^{x_1}x_2 +1 = 0 \\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$\n",
    "\n",
    "its jacobian matrix is:\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "x_1+cosx_0e^{x_1} & x_0+x_2+sinx_0e^{x_1}+1 & x_1 \\\\\n",
    "x_1-e^{x_0}x_1 & x_0-e^{x_0} & 0 \\\\\n",
    "0 & x_2-e^{x_1}x_2 & x_1 + e^{x_1}\\\\\n",
    "\\end{pmatrix}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "9e5e4571",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "228 µs ± 704 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
      "    fjac: array([[-0.99859006, -0.04770242, -0.02328867],\n",
      "       [ 0.0527474 , -0.84236607, -0.53631811],\n",
      "       [-0.00596609,  0.53679036, -0.84369456]])\n",
      "     fun: array([ 3.46156437e-12,  3.37396777e-13, -9.04993858e-11])\n",
      " message: 'The solution converged.'\n",
      "    nfev: 29\n",
      "     qtf: array([ 6.35493439e-11, -2.41966370e-09, -3.82149026e-09])\n",
      "       r: array([-3.57735922,  0.13757113, -1.055479  ,  1.21509145, -1.88903373,\n",
      "       -3.06111671])\n",
      "  status: 1\n",
      " success: True\n",
      "       x: array([-0.19621091,  0.98227023, -0.27376392])\n"
     ]
    }
   ],
   "source": [
    "from numpy import array,mat,sin,cos,exp\n",
    "from scipy.optimize import root\n",
    "\n",
    "def f(x):\n",
    "    eqs=[]\n",
    "    eqs.append(x[0]*x[1]+x[1]*x[2]+sin(x[0])*exp(x[1])+x[1])\n",
    "    eqs.append(x[0]*x[1]-exp(x[0])*x[1]+1)\n",
    "    eqs.append(x[1]*x[2]+exp(x[1])*x[2]+1) \n",
    "    return eqs\n",
    "\n",
    "def jac1(x):\n",
    "    return mat([[x[1]+cos(x[0])*exp(x[1]), x[0]+x[2]+sin(x[0])*exp(x[1])+1, x[1]],\n",
    "                [x[1]-exp(x[0])*x[1], x[0]-exp(x[0]), 0],\n",
    "                [0 ,x[2]+exp(x[1])*x[2], x[1]+exp(x[1])]])\n",
    "\n",
    "%timeit res0 = root(f,[0,0,0])\n",
    "res0 = root(f,[0,0,0])\n",
    "print(res0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "3b86d51d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "256 µs ± 5.4 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
      "    fjac: array([[-0.99859006, -0.04770242, -0.02328867],\n",
      "       [ 0.0527474 , -0.84236606, -0.53631812],\n",
      "       [-0.00596609,  0.53679036, -0.84369456]])\n",
      "     fun: array([ 3.46145335e-12,  3.37840866e-13, -9.04996078e-11])\n",
      " message: 'The solution converged.'\n",
      "    nfev: 20\n",
      "    njev: 3\n",
      "     qtf: array([ 6.35511383e-11, -2.41966355e-09, -3.82149067e-09])\n",
      "       r: array([-3.57735921,  0.13757115, -1.05547902,  1.21509145, -1.88903374,\n",
      "       -3.06111667])\n",
      "  status: 1\n",
      " success: True\n",
      "       x: array([-0.19621091,  0.98227023, -0.27376392])\n"
     ]
    }
   ],
   "source": [
    "%timeit res1 = root(f,[0,0,0],jac=jac1)\n",
    "res1 = root(f,[0,0,0],jac=jac1)\n",
    "print(res1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d41caa28",
   "metadata": {},
   "source": [
    "### scipy fsolve\n",
    "\n",
    "<font color=maroon size=5.5><b>scipy.optimize.fsolve</b></font> <br>\n",
    "\n",
    "     > could only support hybrid and hybrj algorithm\n",
    "     > couldn't calculate complex equation set\n",
    "     \n",
    "```\n",
    "scipy.optimize.fsolve(func, \n",
    "                      x0, \n",
    "                      args=(), \n",
    "                      fprime=None, \n",
    "                      full_output=0, \n",
    "                      col_deriv=0, \n",
    "                      xtol=1.49012e-08, \n",
    "                      maxfev=0, \n",
    "                      band=None, \n",
    "                      epsfcn=None, \n",
    "                      factor=100, \n",
    "                      diag=None)\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bba2b57",
   "metadata": {},
   "source": [
    "$$\n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "x_0 + x_0x_1 -2 = 0 \\\\\n",
    "x_0 -x_1 -2 = 0\\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "aae0b98e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1. -3.]\n",
      "[-1. -3.]\n",
      "[2.00000000e+00 1.14831986e-15]\n",
      "[2.00000000e+00 3.80968313e-17]\n"
     ]
    }
   ],
   "source": [
    "from scipy.optimize import fsolve\n",
    "from numpy import array,mat\n",
    "\n",
    "def f1(x):\n",
    "  return [x[0]+x[0]*x[1]-2,x[0]-x[1]-2]\n",
    "\n",
    "def jac1(x):\n",
    "  return mat([[1+x[1],x[0]],[1,-1]])\n",
    "\n",
    "print(fsolve(f1,[0,-1]))\n",
    "print(fsolve(f1,[0,-1],fprime=jac1))\n",
    "print(fsolve(f1,[0,0]))\n",
    "print(fsolve(f1,[0,0],fprime=jac1))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3ae54b4",
   "metadata": {},
   "source": [
    "## sympy packages"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de608b36",
   "metadata": {},
   "source": [
    "### solve\n",
    "\n",
    "<font color=maroon size=5.5><b>sympy.solve</b></font> <br>\n",
    "\n",
    "    > solve(f, *symbols) will return all possible values with \n",
    "    > nsolve(f,  symbols, value) only returns one possible result, this result will be around initial value provided by value parameter"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "065e9ec2",
   "metadata": {},
   "source": [
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "    (1+2j)x_0 + x_0x_1 +5 = 0 \\\\\n",
    "    x_0 + x_1 - (5+4j) = 0\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "1ef0a2b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(-0.441042116297722 + 0.384513267834321*I,\n",
       "  5.44104211629772 + 3.61548673216568*I),\n",
       " (6.44104211629772 + 5.61548673216568*I,\n",
       "  -1.44104211629772 - 1.61548673216568*I)]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sympy import symbols,Eq,solve\n",
    "\n",
    "x0,x1 = symbols(\"x0,x1\")\n",
    "eqs = [Eq(x0*(1+2j)+x0*x1,-5),Eq(x0+x1,(5+4j))]\n",
    "res = solve(eqs,[x0,x1])\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d404ac43",
   "metadata": {},
   "source": [
    "### nsolve\n",
    "\n",
    "<font color=maroon size=5.5><b>sympy.nsolve</b></font> <br>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f098f9e",
   "metadata": {},
   "source": [
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "    (1+2j)x_0 + x_0x_1 +5 = 0 \\\\\n",
    "    x_0 + x_1 - (5+4j) = 0\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "1ae6013a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}-0.441042116297722 + 0.384513267834321 i\\\\5.44104211629772 + 3.61548673216568 i\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[-0.441042116297722 + 0.384513267834321*I],\n",
       "[   5.44104211629772 + 3.61548673216568*I]])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sympy import symbols,Eq,nsolve,pprint\n",
    "\n",
    "x0,x1 = symbols(\"x0,x1\")\n",
    "eqs = [Eq(x0*(1+2j)+x0*x1,-5),Eq(x0+x1,(5+4j))]\n",
    "res2 = nsolve(eqs,[x0,x1],[1,1])\n",
    "res2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95581711",
   "metadata": {},
   "source": [
    "## dsolve\n",
    "\n",
    "<font color=maroon size=5.5><b>sympy.dsolve</b></font> <br>\n",
    "```\n",
    "sympy.dsolve(\n",
    "    eq,\n",
    "    func=None,\n",
    "    hint='default',\n",
    "    simplify=True,\n",
    "    ics=None,\n",
    "    xi=None,\n",
    "    eta=None,\n",
    "    x0=0,\n",
    "    n=6,\n",
    "    **kwargs,\n",
    ")\n",
    "```\n",
    "\n",
    "    > dsolve(Eq,ics=[]) is used to solve closed-form or numerical result of ode sets or just one simple ode\n",
    "    > the return value res of dsolve could be used like res.evalf(subs ={'alias':value,' ...})  to calculate corrsponding value, then this will return [res.lhs, res.rhs], and <b>res.rhs</b> is the answer of equation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "303fd1b2",
   "metadata": {},
   "source": [
    "for example, we are supposed to solve this plane viberation ode:\n",
    "\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "\\displaystyle\\frac{d^2x(t)}{dx^2} + \\omega_n^2x(t) = 0 \\space,\\\\\n",
    "x(0) = x_0 \\space,\\\\\n",
    "\\displaystyle\\frac{dx(t)}{dt}\\big|_{t=0} = v_0 \\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "919f4e66",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sympy \n",
    "from sympy import symbols, Eq, Function, pprint, latex, dsolve\n",
    "import matplotlib.pyplot as plt \n",
    "\n",
    "# parameters: m-mass, k-rigidity x0c-initial displacement v0c-initial velocity\n",
    "def SHV_1(m,k,x0c,v0c): \n",
    "    # step one: define independent variables and other variables\n",
    "    omega_n,t,x0,v0 = sympy.symbols('wn,t,x0,v0')\n",
    "    # step two: define dependent variable\n",
    "    x = sympy.Function('x') \n",
    "    # step three: define ode\n",
    "    ode_SHV = sympy.diff(x(t),t,2)+omega_n**2*x(t)\n",
    "    # step four: define initial values | boundary values\n",
    "    initcons = {x(0):x0,sympy.diff(x(t),t).subs(t,0):v0} \n",
    "    # step five: dsolve \n",
    "    ode_res = sympy.dsolve(ode_SHV,ics=initcons) \n",
    "    # pprint(ode_res)\n",
    "    \n",
    "    omega_nc = sympy.sqrt(k/m)\n",
    "    freq_n = sympy.sqrt(k/m)/(2*sympy.pi)\n",
    "    xc=[]\n",
    "    tc=[]\n",
    "    for ti in range(0,100,1): \n",
    "        ti=ti/10 \n",
    "        x_t=ode_res.evalf(subs = {'t':ti,'wn':omega_nc,'v0':v0c,'x0':x0c}) \n",
    "        xc.append(x_t.rhs) \n",
    "        tc.append(ti)\n",
    "    return xc,tc\n",
    "\n",
    "xc1,tc1=SHV_1(1,1,0,5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47e7843f",
   "metadata": {},
   "source": [
    "closed form solution of this undamped harmonious vibration is:\n",
    "\n",
    "$$\n",
    "    x{\\left(t \\right)} = \\frac{\\left(- i v_{0} + wn x_{0}\\right) e^{i t wn}}{2 wn} + \\frac{\\left(i v_{0} + wn x_{0}\\right) e^{- i t wn}}{2 wn}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "ef9c7b88",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False \n",
    "\n",
    "plt.figure(\"undamped simple harmonic vibration\",(6,4))\n",
    "plt.title(\"single DOF undamped simple harmonic vibration\")\n",
    "plt.plot(tc1,xc1)\n",
    "plt.xlabel(\"time(t)\")\n",
    "plt.ylabel(\"displacement(x)\")\n",
    "plt.xlim(0,10)\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a2139027",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "288px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
